# coding=utf-8
import numpy as np
import cv2
import math
from scipy import ndimage
from PIL import Image
import os


def getBestShift(img):
    cy, cx = ndimage.measurements.center_of_mass(img)
    rows, cols = img.shape
    shiftx = np.round(cols/2.0-cx).astype(int)
    shifty = np.round(rows/2.0-cy).astype(int)
    return shiftx, shifty


def shift(img,sx,sy):
    rows, cols = img.shape
    M = np.float32([[1, 0, sx], [0, 1, sy]])
    shifted = cv2.warpAffine(img, M, (cols, rows))
    return shifted

def format():
    name ="input"
    resname = "output"
    for a,b,files in os.walk(name):
        for filename in files:
            gray = cv2.imread(name+"/"+filename, cv2.IMREAD_GRAYSCALE)
          #  (thresh, gray) = cv2.threshold(gray, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
            while np.sum(gray[0]) == 0:
                gray = gray[1:]

            while np.sum(gray[:,0]) == 0:
                gray = np.delete(gray,0,1)

            while np.sum(gray[-1]) == 0:
                gray = gray[:-1]

            while np.sum(gray[:,-1]) == 0:
                gray = np.delete(gray,-1,1)
            rows,cols = gray.shape
          #  print rows,cols
            if rows>cols:
                factor = 20.0/rows
                rows = 20
                cols = int(round(cols*factor))
                gray = cv2.resize(gray,(cols,rows))
            else:
                factor = 20.0/cols
                cols = 20
                rows = int(round(rows*factor))
                gray = cv2.resize(gray,(cols,rows))
         #   print gray.shape
            colsPadding = (int(math.ceil((28-cols)/2.0)),int(math.floor((28-cols)/2.0)))
            rowsPadding = (int(math.ceil((28-rows)/2.0)),int(math.floor((28-rows)/2.0)))
            gray = np.lib.pad(gray,(rowsPadding,colsPadding),'constant')
            shiftx,shifty = getBestShift(gray)
            shifted = shift(gray,shiftx,shifty)
            gray = shifted
            cv2.imwrite(resname+"/"+filename,gray)
